01 GB28181中的RTP over TCP GB28181的TCP码流遵循的标准是RFC4571(RTP OVER TCP),具体类型是: 0 1 Framing-Real-time-Transport-Protocol-(RTP)-and-RTP-Control-Protocol-(RTCP)-Packets-over-Conn.pdf》文档 02 RTSP中的RTP over TCP RTSP中tcp码流是遵循的RFC2326标准, 详细介绍参考公众号历史文章:《RTP over TCP》 | magic number | channel number | data length 个字节,用来指示信道 data length :数据长度 - 2个字节,用来指示插入数据长度 data :数据 - ,比如说RTP包,总长度与上面的数据长度相同 RTP,RTCP数据和RTSP数据共享TCP
我们先看看官方规范针对TCP协议的视音频传输描述:实时视频点播、历史视频回放与下载的 TCP媒体传输应支持基于RTP封装的视音频PS流,封装格式参照IETFRFC4571。 默认情况下,前端设备向流媒体服务器发送媒体流时前端设备应作为TCP媒体流传输客户端,流媒体服务器作为 TCP媒体流传输服务端;同级或跨级流媒体服务器间基于 TCP协议传输视频流时,媒体流的接收方宜作为TCP RTP over TCP,需要注意的是,我们实际对接的时候,部分厂商SDP非常随意,有的甚至直接标记个tcp,这让我们对接的时候,很困惑。 技术实现:图片本文以大牛直播SDK的Android平台GB28181设备接入端为例,启动GB28181,完成注册、catalog等交互后,Invite上来后,设置媒体流通过TCP还是UDP发送出去:@Overridepublic public native int SetRTPSenderTransportProtocol(long rtp_sender_handle, int transport_protocol);以上是GB28181
国标视频云服平台EasyGBS可为大数据等综合性监管平台提供极强的视频能力,平台基于国标GB28181协议,支持多路设备接入,并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等多种格式的视频流 我们在测试平台新功能时,发现某设备使用TCP模式不能播放,但是UDP模式可以播放,觉得很奇怪,于是对此进行了一番排查分析。 抓包发现,将配置设置成TCP被动模式,在请求拉流时,设备回复200 OK,但是却设置了UDP模式发送流数据,设备和拉流端的发流协议不同,因此收不到流,所以导致该设备TCP协议下视频不能正常播放,如下图: 从上图抓包数据进一步分析得知,设备未发送SYN消息,建立TCP连接后就直接通道UDP发送流数据。 正常流程应该如下图所示,由此判断是设备端不支持TCP发流。EasyGBS国标视频云服务平台不仅支持无缝、完整接入内网或者公网的国标设备。
GB28181标准规定了公共安全视频监控联网系统(以下简称联网系统) 的互联结构, 传输、 交换、 控制的基本要求和安全性要求, 以及控制、 传输流程和协议接口等技术要求。 2、GB28181框架: SIP 监控域互联结构示意图如下图所示: GB28181的联网方式分为级联和互联方式,级联方式可以详细分为信令级联和媒体级联,下图分别为信令级联和媒体级联方式: 信令级联: 媒体级联 信令互联: 媒体互联: 3、GB28181通信结构: 联网系统内部进行视频、 音频、 数据等信息传输、 交换、 控制时, 遵循的通信协议的结构如下图所示: 联网系统在进行视音频传输及控制时应建立两个传输通道 4、GB28181具体功能: GB28181协议规定支持的功能有如下几项: (1)注册和注销 应支持设备或系统进入联网系统时向SIP 服务器进行注册登记的工作模式。 网络校时设备分为时钟源和客户端, 支持客户/服务器的工作模式; 时钟源应支持 TCP/IP、UDP 及 NTP协议, 能将输入的或自身产生的时间信号以标准的 NTP 信息包格式输出。
2、发现谁在发现 除了搜索设备,我们还需要知道谁往我们得服务地址发送了搜索地址得需求,因为我们是一个设备,其他在gb28181 服务中,我们需要知道sip 网守和网关得设备,可能有多个这种设备,我们则需要知道谁正需要发现设备 serviceList> <presentationURL>http://192.168.0.64:80</presentationURL> </device> </root> 从中可以发现很多信息 那么现在我们得GB28181
不可否定的是国家公安机关一直在强推这套协议,也有很多厂家积极响应号召,如我们的一个大客户中星电子,他们的平台就是纯基于GB28181协议实现的,在重点城市进行平安智慧城市的创建。 海康和大华虽然也有平安城市的平台,但是不是纯基于GB28181的,只是作为一个协议接入,毕竟他们自己的产品很多走的私有协议(市场决定这些因素),所以个人觉得往往是新兴的科技企业在没有利益的驱使下更愿意推行国家标准 下面来说下怎么去实现这个GB28181的协议栈功能。 GB28181协议已经慢慢的进行了规范完善,现在大的趋势也已经是这样,虽然以前有很多的私有协议平台,但新建的平安城市等政府都需要能支持GB28181的互联互通,GB28181协议还有互联功能,这个功能比
CarEye 开发GB28181 服务器有将近两年时间了,早期我们用纯C++开发了一个GB28181视频服务期,对外的接口是基于MQ协议的。这样开发出来的服务器主要有几个问题。 1. SIP服务器和流媒体服务器是绑定在一个进程中的,因为没有分离,造成了视频处理和SIP服务器只能在一台服务器上运行,既不能打到GB28181协议的构架要求。也造成无法使用负载均衡的功能。 2. 基于以上原因,我们重新架构了GB28181视频服务器,指令服务器使用go来作为开发,而流媒体开发继续使用C++作为开发语言。 新开发的GB28181服务器,和GT1078视频服务器通信构成了兼容移动车载,摄像头。集成直播,点播,对讲,上下级级联的流媒体服务群。 其网络架构如下图表示: 我们整理了有关GB28181的开发接口完全对外开放,方便快速应用。
什么是 TCP 转发 定义:TCP 转发就是把一个机器上的某个 TCP 端口收到的流量,中间件或系统内核直接转发到另一台机器的某个 TCP 端口。对于访问者来说,就像直接连到了目标机器。 本文需求背景 ↓ TCP 50101 (用户:张三) 10.10.10.201 (可直连 10.10.10.200) ↓ TCP 3306 (MySQL) 10.10.10.200 ( TCP 数据,原封不动转到 10.10.10.100:3306。 socat TCP-LISTEN:3306,fork TCP:10.10.10.100:3306 3. SSH 隧道 特殊的 TCP 转发,通过 SSH 协议桥接。
EasyCVR视频结构化平台支持的协议广泛,其中就包括GB28181协议及海康摄像头常见的Ehome协议。 有的项目现场将硬盘录像机通过GB28181协议接入到EasyCVR平台后,直播预览正常,但是播放设备录像时则出现无法加载画面的情况。 直播预览画面正常: image.png 播放设备录像一直加载: image.png 因此我们对系统进行wireshark抓包,抓包文件如下: image.png 通过以上信息,可以看出GB28181点播设备录像的 有可能是设备不支持TCP发送设备录像,因此我们尝试通过将配置界面中的传输协议由TCP改为UDP来解决该问题。 修改后设备录像能够成功播放。 image.png 视频传输都会涉及到UDP或者TCP协议,关于这两者的区别及运用方法,大家可以阅读本文简单了解一下:如何正确使用UDP及TCP协议。
学习 TCP 协议,首先第一个要了解当然是 TCP 连接是如何建立的,下面给大家介绍一下三次握手和四次挥手的过程以及为什么要这样设计。 采用四次挥手的原因: 学习过 TCP 连接的都知道,TCP 连接是双向的,一个是从客户端到服务端,另一个是从服务端到客户端。 TCP的优势 从传输数据来讲,TCP/UDP以及其他协议都可以完成数据的传输,从一端传输到另外一端,TCP比较出众的一点就是提供一个可靠的,流控的数据传输,所以实现起来要比其他协议复杂的多,先来看下这两个修饰词的意义 Reliability ,提供TCP的可靠性,TCP的传输要保证数据能够准确到达目的地,如果不能,需要能检测出来并且重新发送数据。 2. Data Flow Control,提供TCP的流控特性,管理发送数据的速率,不要超过设备的承载能力 为了能够实现以上2点,TCP实现了很多细节的功能来保证数据传输,比如说 滑动窗口适应系统,超时重传机制
EasyCVR支持通过与国标平台级联,级联后平台可通过GB28181协议获得以下能力: 1、支持国标GB28181平台、国标GB28181 IPC和国标GB28181 NVR设备同时接入 (支持GB28181 -2011版本和GB28181-2016版本) 2、支持国标GB28181设备注册和注销,对所有设备进行管理,获取资源,对资源列表进行管理 3、支持国标GB28181的目录订阅,对接收的订阅通知进行处理 4、支持国标GB28181实时视频请求(支持UDP、TCP主动(tcpactive)、TCP被动(tcppassive)) 5、支持国标GB28181 PTZ控制 EasyCVR在测试期间偶尔会碰到级联 因此在与此类似的问题中,我们需要注意两点: 1.在对接上级平台要保证上下级平台协议保持一致; 2.在保证下级平台播放正常的情况下,如果对接上级平台TCP无法播放,可以切换到UDP尝试。
本文将简单介绍tcp协议的基本内容,主要包括一下四部分: tcp概述 TCP可靠数据传输 TCP流量控制 TCP连接管理 让我们对tcp有一个简单的回顾总结 TCP概述 tcp是一个点对点端到端的传输协议 tcp传输的是可靠的按序到达的字节流 tcp采用流水线机制,提高传输的效率。TCP通过拥塞控制和流量控制机制来控制滑动窗口的大小 tcp协议分别设置了发送方缓存和接收方缓存 ? TCP连接包括:两台主机上的缓存、连接状态变量、socket等 tcp实现了流量控制机制 TCP段结构 ? A: TCP规范中没有规定,由TCP的实现者做出决策 ? 关于这些问题具体会在tcp拥塞控制里面讨论。 TCP连接管理 TCP sender和receiver在传输数据前需要建立连接。
我们经常收到很多关于EasyGBS、EasyCVR等平台级联的问题,级联后平台可通过GB28181协议获得以下能力: 1、支持国标GB28181平台、国标GB28181 IPC和国标GB28181 NVR 设备同时接入 (支持GB28181-2011版本和GB28181-2016版本) 2、支持国标GB28181设备注册和注销,对所有设备进行管理,获取资源,对资源列表进行管理 3、支持国标GB28181的目录订阅 ,对接收的订阅通知进行处理 4、支持国标GB28181实时视频请求(支持UDP、TCP主动(tcpactive)、TCP被动(tcppassive)) 5、支持国标GB28181 PTZ控制 在某个EasyGBS TSINGSEE青犀视频开发的国标GB28181协议平台EasyGBS支持接入鉴权,并且提供RTSP、RTMP、HTTP-FLV、HLS等多种协议流输出,能够轻松搭建安防视频监控平台,除此之外,EasyGBS
针对这样的问题的解决方案就是给每一个字节都进行编号(TCP 的传输是面向字节流的),并且编号是连续且递增的,按照字节编号这样的机制就称为“TCP 的序号”,在应答报文中,针对之前收到的数据进行对应的编号 超时重传 TCP 对抗丢包的方法:其实丢包是不可能避免的,TCP 感应到丢包之后就会再重新发一次数据,第二次再发生丢包的概率就会减小很多,TCP 感应丢包是通过应答报文来区分的,收到应答报文之后就说明没有丢包 延时应答和捎带应答都提升了 TCP 的性能。 12. 面向字节流 在之前已经提到过,TCP 传输数据时面相字节流的,所以就会涉及到“粘包问题”,粘的是 TCP 携带的载荷(应用层数据包) 由于 TCP 是面相字节流的,所以此处的读操作怎么读都可以,不过读出来的效果就可能和原来的数据包不一样了 TCP 内置了心跳包,由于 TCP 内置的心跳包周期比较长,应用程序这一层也会自行实现一些心跳包,达到更快速的“保活机制”。 4. 网线断开。
GB28181相对RTMP,支持TCP和UDP模式,信令流负责session交互,数据流负责数据传输,适合标准协议规范的平台级产品对接。 此外,产品设计这块,媒体流支持最新GB28181-2016的UDP和TCP被动模式,参数配置,支持注册有效期、心跳间隔、心跳间隔次数、TCP/UDP信令设置,支持RTP Sender IP地址类型、RTP UDP":"TCP"); // GB28181配置 gb28181_agent_.config(gb28181_reg_expired_, gb28181_heartbeat_interval 设计,除了支持TCP和UDP传输外,支持信令和数据传输分离,可实现其他终端针对前端设备的按需播放和处理,无需单独的信令支撑。 缺点是外部支持GB28181的服务器不多,开源如SRS服务器针对GB28181的支持暂不够商用级,期待后续版本升级。
基于国标GB28181协议,EasyGBS可以让下级平台(包含摄像机、支持GB28181的视频平台)级联到EasyGBS,也可以作为下级平台,通过GB28181方式级联到支持GB28181的上级平台。 1)如果是自身的ip,那么上级tcp或者udp连接断开时,需要将下级的tcp或udp同时断开。这样下次进行tcp或者udp连接时,就不会出现不推流的情况,会重新建立连接并推流。 如果还在发流且ip和端口改变,则需要将之前的tcp或者udp断开,并重新建立新的tcp或者udp连接,视频流依旧正常发送给上级即可。上述两种情况均会导致上级EasyGBS平台播放画面卡住的现象。 可通过以下两种方法进行解决:1)如果是自身ip,则解决如下:如果发送数据流失败,可将tcp和udp给个回调,并断开连接。 参考代码如下:2)如果是非自身ip,则解决如下:非自身ip时,不会发送tcp和udp失败,这样就需要检测唯一键值进行判断。ip不一样,将之前的断开即可,并重新连接新的地址。
,实现GB28181整体方案的测试? 产品设计方面,媒体流支持最新GB28181-2016的UDP和TCP被动模式,参数配置,支持注册有效期、心跳间隔、心跳间隔次数、TCP/UDP信令设置,支持RTP Sender IP地址类型、RTP Socket setUserAgent(String userAgent); /* * 设置SIP传输协议 * @param transport_protocol, 设置SIP信令传输协议: UDP, TCP H265打包成PS流,然后拆成RTP包发送即可),RTP传输支持TCP、UDP模式,配合国标28181服务器测试,延时非常低,设计支持多通道,可实现RTSP或RTMP流数据到GB28181的转换。 为Android平台赋能,像支持GB28181协议的IPC一样,方便的把摄像头、屏幕、麦克风或外部RTSP、RTMP流,顺利接入到GB28181平台。
以下就以Android平台GB28181设备接入模块,语音广播这块为例:当收到GB28181平台端的语音广播请求后,客户端做出响应,并在ntsOnNotifyBroadcastCommand()回调做出相应的处理 = null ) { String local_ip_addr = IPAddrUtils.getIpAddress(context_); boolean is_tcp = true; // 考虑到跨网段, 默认用TCP传输rtp包 rtp_receiver_handle_ = lib_player_.CreateRTPReceiver(0); = 0 ) { lib_player_.SetRTPReceiverTransportProtocol(rtp_receiver_handle_, is_tcp? TCP/RTP/AVP":"RTP/AVP"); if (!
tcp_sk(sk); ... 在经过序号检查、PAWS检查之后,如果发现此报文设置了TCP_FLAG_RST或者TCP_FLAG_SYN标志位,判断为非法报文,跳转到embryonic_reset。 |TCP_FLAG_SYN)) { __TCP_INC_STATS(sock_net(sk), TCP_MIB_ATTEMPTFAILS); goto embryonic_reset tcp_sequence(tp, TCP_SKB_CB(skb)->seq, TCP_SKB_CB(skb)->end_seq)) { /* RFC793, page 37: "In all */ switch (sk->sk_state) { case TCP_CLOSE_WAIT: case TCP_CLOSING: case TCP_LAST_ACK:
GB/T28181-2011 《安全防范视频监控联网系统信息传输、交换、控制技术要求》中规定了联网系统应对前端设备、监控中心设备、用户终端ID进行统一编码,该编码具有全局唯一性。这就是国标编码。编码分20位和18位,其中18位编码已经淘汰。下文中,只讲国标20位编码